package game.model;

import java.util.HashSet;
import java.util.Set;

/**
 * Clase que almacena la informacion necesaria para poder describir una 
 * celda en el tablero, el componente que guarda y los rayos que inciden
 * sobre ella.
 */

public class Celda {
	private Componente componente;
	private Set<Rayo> rayos;

	/**
	 * Constructor de la clase
	 * 
	 * @param componente el tipo de componente que va a contener.
	 */
	
	public Celda(Componente componente) {
		this.componente = componente;
		this.rayos = new HashSet<Rayo>();
	}
	
	/**
	 * Agrega un nuevo rayo incidente en la celda.
	 * 
	 * @param rayo el rayo que entra o sale de la celda.
	 */
	
	public void agregaRayo(Rayo rayo) {
		this.rayos.add(rayo);
	}
	
	/**
	 * Agrega una cantidad de rayos incidente en la celda.
	 * 
	 * @param rayos los rayos que entran o salen de la celda.
	 */
	
	public void agregaRayo(Set<Rayo> rayos) {
		for(Rayo rayo: rayos) {
			this.agregaRayo(rayo);
		}
	}
	
	/**
	 * Elimina todos los rayos que inciden sobre la celda
	 */
	
	public void limpiaCelda() {
		rayos = new HashSet<Rayo>();
	}
	
	/**
	 * Retorna los rayos incidentes sobre la celda.
	 * 
	 * @return Set<Rayo> rayos que entran o salen de la celda.
	 */
	
	public Set<Rayo> getRayos() {
		return rayos;
	}

	/**
	 * Retorna la componente contenida en la celda.
	 * 
	 * @return Componente componente que contiene la celda.
	 */
	
	public Componente getComponente() {
		return componente;
	}

	/**
	 * Setea la componente contenida en la celda.
	 * 
	 * @param componente componente que contiene la celda.
	 */
	
	public void setComponente(Componente componente) {
		this.componente = componente;
	}
	
	/**
	 * Retorna un boolean indicando si la celda debe ser contada en la suma
	 * de puntos del tablero ganado.
	 * 
	 * @return boolean true en caso de que incidan rayos en la celda, false en caso
	 * contrario.
	 */
	
	public boolean sumaPuntos() {
		return !rayos.isEmpty();
	}
	
}
